//
//  UIView+theme.m
//  OC背景主题
//
//  Created by Hahn on 2018/11/1.
//  Copyright © 2018 今晚打老虎. All rights reserved.
//

#import "UIView+theme.h"
#import "theme.h"
//添加runtime头文件，运行时
#import <objc/runtime.h>

@implementation UIView (theme)

#pragma mark - 添加type的set,get方法

- (void)setType:(id)type {
    /**
     为KVO创建观察者
      objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy)
      id object                     :表示关联者，是一个对象，变量名理所当然也是object
      const void *key               :获取被关联者的索引key
      id value                      :被关联者，这里是一个block
     policy：关联策略。有五种关联策略。
     OBJC_ASSOCIATION_ASSIGN 等价于 @property(assign)。
     OBJC_ASSOCIATION_RETAIN_NONATOMIC等价于 @property(strong, nonatomic)。
     OBJC_ASSOCIATION_COPY_NONATOMIC等价于@property(copy, nonatomic)。
     OBJC_ASSOCIATION_RETAIN等价于@property(strong,atomic)。
     OBJC_ASSOCIATION_COPY等价于@property(copy, atomic)。
     */
    objc_setAssociatedObject(self, @selector(type), type, OBJC_ASSOCIATION_RETAIN_NONATOMIC);


}

- (id)type {
    /**
     objc_getAssocicatedObject用于获取关联对象的值。
     */
    return objc_getAssociatedObject(self, @selector(type));
}

#pragma mark - 开始监听

- (void)startMonitor {
    //如果观察者有改变
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeColor) name:@"changeColor" object:nil];

}

#pragma mark - 改变颜色

- (void)changeColor {
    // type为NSNumber型, 变为NSInteger
    switch ([self.type integerValue]) {
        case UIViewColorTypeNormal:
            self.backgroundColor = [theme shareTheme].color;
            break;
        case UIViewColorTypeNormal1:
            self.backgroundColor = [theme shareTheme].color3;
            break;
        default:
            break;
    }
    
}

#pragma mark - 设置颜色类型和对应颜色

- (void)themeWithType:(UIViewColorType)type {

    self.type = [NSNumber numberWithInteger:type];
    [self changeColor];
    [self startMonitor];

}



@end
